python3之多线程、共享变量、死锁问题 您所在的位置:网站首页 python 多线程共享变量 python3之多线程、共享变量、死锁问题

python3之多线程、共享变量、死锁问题

2024-07-01 17:36| 来源: 网络整理| 查看: 265

1、环境

-xubuntu、anaconda、pycharm、python3.7

-https://www.cnblogs.com/jokerbj/p/7460260.html

-https://www.dabeaz.com/python/UnderstandingGIL.pdf

2、多线程

-程序:一堆代码以文本形式存入一个文档

-进程:程序运行的一个状态

       -包含地址空间、内存数据线等

       -每个进程有自己完全独立的运行环境,多进程共享数据是一个问题

-线程

       -一个进程的独立运行片段,一个进程可以有多个线程

       -轻量化的进程

       -一个进程的多个线程间共享数据和上下文运行环境

       -共享互斥问题

-全局解释器锁(GIL)

        -Python代码的执行是由python虚拟机进行控制

        -在主循环中只能有一个控制线程在执行

-Python包

         -thread:有问题,不好用,python3改成了_thread

         -threading:通行的包

         -案例:第一个:顺序执行,耗时长;

                     第二个:多线程,耗时短

                     第三个:多线程,传参数

''' 利用time函数,生成两个函数 程序调用 计算总的运行时间 ''' import time def loop1(): #ctime 得到当前时间 print('Start loop1 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(4) print('End loop1 at:',time.ctime()) def loop2(): #ctime 得到当前时间 print('Start loop2 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(2) print('End loop2 at:',time.ctime()) def main(): print("Sarting at:",time.ctime()) loop1() loop2() print("All done at:",time.ctime()) if __name__=='__main__': main() 运行: Sarting at: Sun Mar 31 10:26:00 2019 Start loop1 at: Sun Mar 31 10:26:00 2019 End loop1 at: Sun Mar 31 10:26:04 2019 Start loop2 at: Sun Mar 31 10:26:04 2019 End loop2 at: Sun Mar 31 10:26:06 2019 All done at: Sun Mar 31 10:26:06 2019 ----------------------------------------------------------- ''' 多线程 ''' import time import _thread as thread def loop1(): #ctime 得到当前时间 print('Start loop1 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(4) print('End loop1 at:',time.ctime()) def loop2(): #ctime 得到当前时间 print('Start loop2 at:',time.ctime()) #睡眠多长时间,单位是秒 time.sleep(2) print('End loop2 at:',time.ctime()) #有三个线程,一个主线程(主管),两个工作的人,干的活是loop1、loop2 def main(): print("Sarting at:",time.ctime()) #启动多线程的意思是用多线程去执行某个函数 #启动多线程函数为start_new_thread #参数两个,一个是需要运行的函数名,第二个函数参数作为元组使用 #注意:如果函数只有一个参数,需要参数后有一个括号,若有参数放在括号里 thread.start_new_thread(loop1,()) thread.start_new_thread(loop2,()) print("All done at:",time.ctime()) if __name__=='__main__': main() #死循环,主线程一直等 while True: time.sleep(1) 运行: Sarting at: Sun Mar 31 10:54:45 2019 All done at: Sun Mar 31 10:54:45 2019 Start loop2 at:Start loop1 at: Sun Mar 31 10:54:45 2019Sun Mar 31 10:54:45 2019 End loop2 at: Sun Mar 31 10:54:47 2019 End loop1 at: Sun Mar 31 10:54:49 2019 ----------------------------------------------------------------------------------- ''' 利用time延时函数生成两个函数 利用多线程调用 计算总运行时间 练习带参数的多线程


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有